home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / ImportXMLHandler$EModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  5.0 KB  |  174 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.xml.dt.DataTypeFactory;
  4. import java.util.Enumeration;
  5. import java.util.Hashtable;
  6. import java.util.Vector;
  7. import org.xml.sax.AttributeList;
  8.  
  9. class ImportXMLHandler$EModel {
  10.    // $FF: synthetic field
  11.    final ImportXMLHandler this$0;
  12.    String name;
  13.    ImportXMLHandler.CMNode root;
  14.    Hashtable attributes;
  15.    Vector required;
  16.    Hashtable idCandidates;
  17.    Hashtable enumCandidates;
  18.    boolean isMixed;
  19.  
  20.    ImportXMLHandler$EModel(ImportXMLHandler var1, String var2) {
  21.       this.this$0 = var1;
  22.       this.root = new ImportXMLHandler.CMNode(this.this$0, "");
  23.       this.attributes = new Hashtable();
  24.       this.idCandidates = new Hashtable();
  25.       this.enumCandidates = new Hashtable();
  26.       this.name = var2;
  27.    }
  28.  
  29.    void setMixed() {
  30.       this.isMixed = true;
  31.    }
  32.  
  33.    boolean isMixed() {
  34.       return this.isMixed;
  35.    }
  36.  
  37.    public Hashtable getAttrs() {
  38.       return this.attributes;
  39.    }
  40.  
  41.    String getIDGuess() {
  42.       String var1 = null;
  43.       Enumeration var2 = this.idCandidates.keys();
  44.  
  45.       while(var2.hasMoreElements()) {
  46.          String var3 = (String)var2.nextElement();
  47.          if (this.idCandidates.get(var3) == Boolean.TRUE) {
  48.             if (var1 != null) {
  49.                return null;
  50.             }
  51.  
  52.             var1 = var3;
  53.          }
  54.       }
  55.  
  56.       if (var1 == null) {
  57.          return null;
  58.       } else {
  59.          Hashtable var4 = (Hashtable)this.attributes.get(var1);
  60.          return var4.size() < 10 ? null : var1;
  61.       }
  62.    }
  63.  
  64.    boolean isEnum(String var1) {
  65.       Object var2 = this.enumCandidates.get(var1);
  66.       if (var2 != null && var2 != Boolean.FALSE) {
  67.          int var3 = (Integer)var2;
  68.          Hashtable var4 = (Hashtable)this.attributes.get(var1);
  69.          return var4.size() < 10 && var3 > var4.size() / 10;
  70.       } else {
  71.          return false;
  72.       }
  73.    }
  74.  
  75.    Object incrEnumCount(String var1) {
  76.       Object var2 = this.enumCandidates.get(var1);
  77.       if (var2 == null) {
  78.          return new Integer(1);
  79.       } else {
  80.          return var2 == Boolean.FALSE ? var2 : new Integer((Integer)var2 + 1);
  81.       }
  82.    }
  83.  
  84.    void addAttributes(AttributeList var1) {
  85.       if (this.required == null) {
  86.          this.required = new Vector();
  87.  
  88.          for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  89.             this.required.addElement(var1.getName(var2));
  90.          }
  91.       } else {
  92.          for(int var6 = this.required.size() - 1; var6 >= 0; --var6) {
  93.             if (var1.getValue((String)this.required.elementAt(var6)) == null) {
  94.                this.required.removeElementAt(var6);
  95.             }
  96.          }
  97.       }
  98.  
  99.       for(int var7 = 0; var7 < var1.getLength(); ++var7) {
  100.          String var3 = var1.getName(var7);
  101.          Hashtable var4 = (Hashtable)this.attributes.get(var3);
  102.          if (null == var4) {
  103.             var4 = new Hashtable();
  104.             this.attributes.put(var3, var4);
  105.          }
  106.  
  107.          String var5 = var1.getValue(var7);
  108.          if (null != var5) {
  109.             if (var4.containsKey(var5)) {
  110.                this.enumCandidates.put(var3, this.incrEnumCount(var3));
  111.                this.idCandidates.put(var3, Boolean.FALSE);
  112.             } else if (!DTDParser.isNmToken(var5)) {
  113.                this.enumCandidates.put(var3, Boolean.FALSE);
  114.                this.idCandidates.put(var3, Boolean.FALSE);
  115.             } else if (!DTDParser.isName(var5)) {
  116.                this.idCandidates.put(var3, Boolean.FALSE);
  117.             } else if (!this.idCandidates.containsKey(var1.getName(var7))) {
  118.                this.idCandidates.put(var3, Boolean.TRUE);
  119.             }
  120.  
  121.             var4.put(var5, var5);
  122.          }
  123.       }
  124.  
  125.    }
  126.  
  127.    void updateContentModel(ContentModel var1) {
  128.       if (this.isMixed()) {
  129.          var1.setMixed();
  130.          this.getRoot().doNodeAsMixed(var1.getRootGroup());
  131.       } else if (!this.getRoot().next.isEmpty()) {
  132.          var1.setContentModel(6);
  133.          this.getRoot().doNodeSeq(var1.getRootGroup());
  134.       }
  135.  
  136.    }
  137.  
  138.    ElementDeclaration makeElement() {
  139.       ElementDeclaration var1 = new ElementDeclaration(this.name, 3);
  140.       ContentModel var2 = var1.getContentModel();
  141.       this.updateContentModel(var2);
  142.       return var1;
  143.    }
  144.  
  145.    public void makeAttributes(ElementDeclaration var1) {
  146.       String var2 = this.getIDGuess();
  147.  
  148.       AttributeDeclaration var4;
  149.       for(Enumeration var3 = this.getAttrs().keys(); var3.hasMoreElements(); var1.add(var4)) {
  150.          String var5 = (String)var3.nextElement();
  151.          Hashtable var6 = (Hashtable)this.getAttrs().get(var5);
  152.          Vector var7 = new Vector();
  153.          Enumeration var8 = var6.keys();
  154.  
  155.          while(var8.hasMoreElements()) {
  156.             var7.addElement(var8.nextElement());
  157.          }
  158.  
  159.          if (var2 != null && var5.equals(var2)) {
  160.             var4 = new AttributeDeclaration(var1, var5, DataTypeFactory.createDataType(2), this.required.indexOf(var5) >= 0, (String)null);
  161.          } else if (this.isEnum(var5)) {
  162.             var4 = new AttributeDeclaration(var1, var5, DataTypeFactory.createDataType(10), var7, this.required.indexOf(var5) >= 0, (String)null);
  163.          } else {
  164.             var4 = new AttributeDeclaration(var1, var5, DataTypeFactory.createDataType(1), this.required.indexOf(var5) >= 0, (String)null);
  165.          }
  166.       }
  167.  
  168.    }
  169.  
  170.    ImportXMLHandler.CMNode getRoot() {
  171.       return this.root;
  172.    }
  173. }
  174.